/* 
 * FuncionarioDAO.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import br.com.pma.chamatec.exception.ChamatecNegocioException;
import br.com.pma.entity.Funcionario;
import br.com.pma.entity.Usuario;

/**
 * DAO de acesso a dados da tabela Funcionario.
 *
 * @author Ludemeula Fernandes de Sá
 */
public class FuncionarioDAO extends GenericChamatecDAO<Funcionario> {
	private static final long serialVersionUID = 5731677148239232345L;

	/**
	 * Obtém Funcionario pelo Usuario informado.
	 * 
	 * @param usuario
	 * @return
	 * @throws ChamatecNegocioException
	 */
	public Funcionario recuperarPorCpf(Usuario usuario) throws ChamatecNegocioException {
		Funcionario retorno = null;
		try {
			CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
			CriteriaQuery<Funcionario> criteriaQuery = criteriaBuilder.createQuery(Funcionario.class);
			Root<Funcionario> root = criteriaQuery.from(Funcionario.class);
			List<Predicate> condicoes = new ArrayList<Predicate>();

			Predicate whereCpf = criteriaBuilder.equal(root.get("cpf"), usuario.getCpf());
			condicoes.add(whereCpf);

			criteriaQuery.where(condicoes.toArray(new Predicate[]{}));

			criteriaQuery.select(root);
			List<Funcionario> lista = getEntityManager().createQuery(criteriaQuery).getResultList();
			if (lista != null && lista.size() > 0) {
				retorno = lista.get(0);
			}
		} catch (Exception e) {
			throw new ChamatecNegocioException(e);
		}
		return retorno;
	}
}